package com.exercises;


import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

class Exercise137 {
    public static void main(String[] args) {
        System.out.println(new Exercise137().singleNumber(new int[]{2, 2, 3, 2}));
    }


    public int singleNumber(int[] nums) {
//        Arrays.sort(nums);
//        int a = nums[0];
//        int count = 1;
//        for (int i = 1; i < nums.length; i++) {
//            if (nums[i] == a) {
//                count++;
//                continue;
//            }
//            if (count == 1) {
//                return a;
//            } else {
//                count = 1;
//                a = nums[i];
//            }
//        }
//        return a;


//        Map<Integer, Integer> map = new HashMap<>();
//        for (int i : nums) {
//            map.put(i, map.getOrDefault(i, 0) + 1);
//        }
//        return map.entrySet().stream().filter(e -> e.getValue() == 1).findFirst().get().getKey();


        int a = 0, b = 0;
        for (int num : nums) {
            b = ~a & (b ^ num);
            a = ~b & (a ^ num);
        }
        return b;


    }
}
